package servidor;


import javax.swing.ImageIcon;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Color;
import javax.swing.SwingConstants;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import clasesBasicas.Usuario;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

public class PanelUsuarios extends JPanel {


	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Variabe que se pone a true cuando se ha seleccionado algun usuarios de la lista.
	 * �til para activar los botones editar y borrar. 
	 */
	//	private boolean usMarc = false;
	private static JTable tabla;
	private static ModeloTabla dtm;
	private JPopupMenu jPMmenu;
	private JPanel este;
	
	
	//Usuario util para el panel Editar.
	public static Usuario temp  = new Usuario();

	/**
	 * Create the panel.
	 */
	public PanelUsuarios() {
		
		este=this;
		setLayout(null);

		JButton btnVolver = new JButton("New button");
		btnVolver.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				VentanaServidor.volverPanelUsuarios();
			}
		});
		btnVolver.setBounds(20, 15, 70, 70);
		ImageIcon imgVolver = new ImageIcon("imagenes/atras.png");
		btnVolver.setFocusPainted(false);
		btnVolver.setBorderPainted(false);
		btnVolver.setContentAreaFilled(false);
		btnVolver.setIcon(imgVolver);

		btnVolver.setBorder(null);
		add(btnVolver);

		JLabel lblListaUsuarios = new JLabel("LISTA USUARIOS");
		lblListaUsuarios.setHorizontalAlignment(SwingConstants.CENTER);
		lblListaUsuarios.setForeground(Color.BLUE);
		lblListaUsuarios.setFont(new Font("Times New Roman", Font.BOLD | Font.ITALIC, 18));
		lblListaUsuarios.setBounds(221, 44, 175, 31);
		add(lblListaUsuarios);

		JScrollPane scrollPaneListUsuario = new JScrollPane();
		scrollPaneListUsuario.setBounds(32, 103, 540, 310);
		add(scrollPaneListUsuario);



		JButton btnAnadirUsuario = new JButton("A\u00F1adir Usuario");
		btnAnadirUsuario.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				VentanaServidor.irPanelAnadir();
			}
		});
		btnAnadirUsuario.setForeground(Color.GREEN);
		btnAnadirUsuario.setFont(new Font("Times New Roman", Font.BOLD, 14));
		btnAnadirUsuario.setBounds(237, 436, 145, 31);
		add(btnAnadirUsuario);


		String[][] datos = null;
		ArrayList<Usuario> aU = VentanaServidor.bdUsers.obtenerUsuarios(); 
		//Aqui hay que cargar a los usuarios de la BD
		if(aU.size()!= 0){
			datos = new String[aU.size()][5];
		}
		else{
			datos = new String[0][5];
		}
		String[] columnas = {"ID", "Nombre", "Apellido", "Id_Usuario","Contrasena"};

		for (int i = 0; i < aU.size(); i++) 
		{
			Usuario u = aU.get(i);
			
			//inserto los datos
			datos[i][0] = u.getId()+"";
			datos[i][1] = u.getNombre();
			datos[i][2] = u.getApellido();
			datos[i][3] = u.getUserName();
			datos[i][4] = u.getPassword();
		}
		
		tabla = new JTable();
		tabla.setGridColor(new Color(0, 0, 0));
		tabla.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
		tabla.setPreferredSize(new Dimension(600,350));
		tabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		tabla.setFont(new Font("Tahoma", Font.ROMAN_BASELINE, 16));
		scrollPaneListUsuario.setViewportView(tabla);


		DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
		tcr.setHorizontalAlignment(SwingConstants.CENTER); 
				
		dtm = new ModeloTabla(datos, columnas);
		tabla.setModel(dtm);
		for(int i = 0;i < 5; i ++ ){
		
			tabla.getColumnModel().getColumn(i).setCellRenderer(tcr);
		}
		tabla.getColumnModel().getColumn(0).setPreferredWidth(10);
		tabla.getColumnModel().getColumn(1).setPreferredWidth(70);
		tabla.getColumnModel().getColumn(2).setPreferredWidth(80);
		tabla.getColumnModel().getColumn(3).setPreferredWidth(80);
		tabla.getColumnModel().getColumn(4).setPreferredWidth(50);
		



		jPMmenu= new JPopupMenu();
		JMenuItem eliminarUsuario= new JMenuItem("Eliminar", new ImageIcon("imagenes/eliminar.png"));
		JMenuItem editarUsuario= new JMenuItem("Editar", new ImageIcon("imagenes/editar.png"));
		jPMmenu.add(eliminarUsuario);
		jPMmenu.add(editarUsuario);


		//escuchadores

		eliminarUsuario.addMouseListener(new MouseAdapter() {

			public void mouseReleased(MouseEvent e){
				try{
					String user = (String) dtm.getValueAt(tabla.getSelectedRow(), 3);

					System.out.println(user);
					int eleccion=JOptionPane.showConfirmDialog(null, "�Est� seguro de que quiere eliminar la cuenta de "+user+"?", 
							"Eliminar cuenta", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
					if(eleccion==0)
					{
						System.out.println("Si quiero");
						VentanaServidor.bdUsers.borrarUsuario(user);

						dtm.removeRow(tabla.getSelectedRow());
						dtm.fireTableDataChanged();
						tabla.repaint();

					}
				}catch (ArrayIndexOutOfBoundsException e2) {
					// TODO: handle exception
					System.out.println("Ningun usuario seleccionado");
				}

			}

		});

		editarUsuario.addMouseListener(new MouseAdapter() {

			public void mouseReleased(MouseEvent e) {
				try{
					temp= new Usuario();
					temp.setId(Integer.parseInt((String) dtm.getValueAt(tabla.getSelectedRow(), 0))); 
					temp.setNombre((String) dtm.getValueAt(tabla.getSelectedRow(), 1));
					temp.setApellido((String) dtm.getValueAt(tabla.getSelectedRow(), 2));
					temp.setUserName((String) dtm.getValueAt(tabla.getSelectedRow(), 3));
					temp.setPassword((String)dtm.getValueAt(tabla.getSelectedRow(), 4));
					VentanaServidor.irPanelEditar(temp);
				}catch (ArrayIndexOutOfBoundsException e2) {
					// TODO: handle exception
					System.out.println("Ningun usuario seleccionado");
				}

			}
		});

		tabla.addMouseListener(new MouseAdapter() {

			public void mousePressed(MouseEvent e){
				if(e.isPopupTrigger())
				{
					jPMmenu.show(este,e.getX(),e.getY()+100);	
				}
				
			}

			public void mouseReleased(MouseEvent e)
			{
				if(e.isPopupTrigger())
				{
					jPMmenu.show(este,e.getX(),e.getY()+100);	
				}
			}
		});
	}

	public class ModeloTabla extends DefaultTableModel{


		public ModeloTabla() {
			super();
			// TODO Auto-generated constructor stub
		}

		public ModeloTabla(Object[][] data, Object[] columnNames) {
			super(data, columnNames);
			// TODO Auto-generated constructor stub
		}

		private static final long serialVersionUID = 1L;

		public boolean isCellEditable(int fila,int columna){
			if(columna >= 0)
				return false;
			return true;
		}

	}
	
	public static void actualizartablaUsuarios(Usuario u){
//		dtm.addRow(Object{u.getId(),u.getNombre(),u.getApellido(),u.getUserName(),u.getPassword()});
		Object[] datos = {u.getId()+"",u.getNombre(),u.getApellido(),u.getUserName(),u.getPassword()};
		dtm.addRow(datos);
		tabla.repaint();
	}
	public static void actualizartablaUsuariosEdiccion(Usuario u){

		for(int i = 0; i < dtm.getRowCount(); i++){
			if(!(dtm.getValueAt(tabla.getSelectedRow(), 3).equals(u.getUserName()))
					||!(dtm.getValueAt(tabla.getSelectedRow(), 4).equals(u.getPassword()))){
				System.out.println("Antes: " + dtm.getValueAt(tabla.getSelectedRow(), 3) + "Ahora: " + u.getUserName());
				System.out.println("Antes: " + dtm.getValueAt(tabla.getSelectedRow(), 4) + "Ahora: " + u.getPassword());
				dtm.setValueAt(u.getUserName(), i, 3);
				dtm.setValueAt(u.getPassword(), i, 4);
				tabla.repaint();
				break;
			}
		}
		
		
		
	}
	
}
